/*
 ============================================================================
  Mapa de um char para um valor
 ============================================================================
 */

typedef struct
{
	char chave;
	int valor;
} ChaveValor;

typedef struct _itemMapa
{
	ChaveValor chaveValor;
	struct _itemMapa *prox;   //ponteiro para o proximo item

} ItemMapa;

typedef ItemMapa *PItemMapa;

typedef struct
{
	PItemMapa Primeiro, Ultimo;
} MapaChar;

/**
 * Funcao para verificar se o mapa esta vazio
 */
int isMapaCharVazio(MapaChar L);

/**
 * Funcao para criar o mapa
 */
void criaMapaChar(MapaChar *L);

/**
 * Funcao para inserir um ItemCaracter no mapa
 */
void inserirItemCaracter(MapaChar *L, PItemMapa a);

/**
 * Funcao para inserir um par (char, int) no mapa
 * Caso ja exista o char no mapa o valor inteiro associado a este char e atualizado
 */
void putCaracter(MapaChar *L, char chave, int valor);

/**
 * Funcao para obter um valor inteiro a partir de um char denominado chave
 */
int getValor(MapaChar *L, char chave);

/**
 * Funcao para remover um par identificado por um char denominado chave
 */
void removerCaracter(MapaChar *l, char chave);

/**
 * Funcao para imprimir os pares (char, int) do mapa
 */
void imprimirMapaChar(MapaChar L);

/**
 * Funcao para contar o numero de chars presentes no mapa
 */
int contarCaracteres(MapaChar L);

/**
 * Funcao para obter a palavra formada por todos os caracteres do mapa
 */
char *palavraCaracter(MapaChar L);

/**
 * Funcao para liberar a memoria ocupada pelo mapa
 */
void liberaMapaChar(MapaChar L);
